# -*- coding: utf-8 -*-
from django.db import models

# Create your models here.
class Categoria(models.Model):
    """
    representacao das categorias da carreira
    docente do ensino superio politecnico
    """
    ESCOLHAS_CATEGORIAS = ((u'professor-titular', u'professor-titular'),
                           (u'professor-coordenador com agragação', 
                            u'professor-coordenador com agregação'),
                           (u'professor-adjunto', u'professor-adjunto'),
                           (u'assistente do segundo triénio com Mestrado', 
                            u'assistente do segundo triénio com Mestrado'),
                           (u'assistente do segundo triénio', 
                            u'assistente do segundo triénio'),
                           (u'assistente do primeiro triénio', 
                            u'assistente do primeiro triénio'),
                           )
    designacao = models.CharField(max_length=50,
                                  verbose_name="Designação",
                                  choices=ESCOLHAS_CATEGORIAS)
    
    def __unicode__(self):
        return u"%s" % self.designacao
    pass

class Curso(models.Model):
    ESCOLHAS_TIPO_CURSO = (
                           (u'CET', u'CET'),
                           (u'Licenciatura', u'Licenciatura'),
                           (u'Mestrado', u'Mestrado'),
                           )
    designacao = models.CharField(max_length=60,
                                  verbose_name="Designação do Curso")
    tipo_curso = models.CharField(max_length=15, 
                                  choices=ESCOLHAS_TIPO_CURSO)
    def __unicode__(self):
        return u'{0} {1}'.format(self.tipo_curso, self.designacao)
    pass
    
class UnidadeCurricular(models.Model):
    ESCOLHAS_SEMESTRE = (
                         (u'V', u'Verão'),
                         (u'I', u'Inverno'),
                         )
    
    curso = models.ForeignKey(Curso, null=True, blank=True)
    
    designacao = models.CharField(max_length=60,
                                  verbose_name="Designação da Unidade")
    epoca_semestre = models.CharField(max_length=2, choices = ESCOLHAS_SEMESTRE,
                                      verbose_name="Verão/Inverno")
    semestre = models.PositiveIntegerField(verbose_name="semestre")
    
    def __unicode__(self):
        return u'{0}: {1}'.format(self.designacao, self.curso)
    
    
    class Meta:
        verbose_name_plural = "Unidades Curriculares"
        pass
    pass

class TipoGrauAcademico(models.Model):
    TIPOS_GRAU = (
                         (u'B', u'Bacharelato'),
                         (u'L', u'Licenciatura'),
                         (u'M', u'Mestrado'),
                         (u'D', u'Doutoramento'),
                         (u'A', u'Agregação'),
                         (u'E', u'Especialista')
                         )
    tipo = models.CharField(max_length=60, verbose_name="Tipo de Grau")
    def __unicode__(self):
        return u"%s" % self.tipo
    class Meta:
        verbose_name = "Tipo de Grau Académico"
        verbose_name_plural = "Tipos de Graus Académicos"
    pass

class GrauAcademico(models.Model):
    """
    """
    designacao = models.CharField(max_length=100, 
                                  verbose_name="Área do Grau")

    tipo = models.ForeignKey(TipoGrauAcademico)
    def __unicode__(self):
        return u'{0} {1}'.format(self.tipo,self.designacao)
    
    class Meta:
        verbose_name = "Grau Académico"
        verbose_name_plural = "Graus Académicos"
    pass


class Candidato(models.Model):
    """
    informação sobre os candidatos
    """
    nome = models.CharField(max_length=60,
                            verbose_name="Nome Completo")
    idade = models.PositiveSmallIntegerField(null=True,
                                             blank=True)
    
    categoria_actual = models.ForeignKey(Categoria,related_name='Contratos_candidato.categoria_actual_id',
                                         null=True,
                                         blank=True,
                                         verbose_name="Categoria Actual")
    
    grau_academico_1 = models.ForeignKey(GrauAcademico,related_name='grau_academico_1',
                                         verbose_name="Último Grau Académico" )
    data_academico_1 = models.DateField(verbose_name="Data de Obtenção")
    
    grau_academico_2 = models.ForeignKey(GrauAcademico,
                                         null=True,
                                         related_name='grau_academico_2',
                                         blank=True)
    data_academico_2 = models.DateField(blank=True,
                                        null=True,
                                        verbose_name="Data de Obtenção")
    
    grau_academico_3 = models.ForeignKey(GrauAcademico,related_name='grau_academico_3',
                                         null=True,
                                         blank=True)
    data_academico_3 = models.DateField(blank=True,
                                        null=True,
                                        verbose_name="Data de Obtenção")
    
    grau_academico_4 = models.ForeignKey(GrauAcademico,related_name='grau_academico_4',
                                         null=True,                                         
                                         blank=True)  
    data_academico_4 = models.DateField(blank=True,
                                        null=True,                                         
                                        verbose_name="Data de Obtenção")

    grau_academico_5 = models.ForeignKey(GrauAcademico,related_name='grau_academico_5',
                                         null=True,                                         
                                         blank=True)  
    data_academico_5 = models.DateField(blank=True,null=True,
                                        verbose_name="Data de Obtenção")
  
    actividades_docencia = models.TextField(max_length=1000, blank=True,
                                            null=True,                                         
                                            verbose_name="Actividades Docentes")
    
    def __unicode__(self):
        return u"%s" % self.nome
    pass

    

class CertificacaoProfissional(models.Model):
    designacao = models.CharField(max_length=100,
                                  verbose_name="Título da Certificação")
    data = models.DateField(verbose_name="Data de Obtenção")
    
    def __unicode__(self):
        return u"%s" % self.designacao
    class Meta:
        verbose_name_plural = "Certificações e Formações Profissionais"
        verbose_name = "Certificação e Formação Profissional"
        pass
    pass


class Contrato(models.Model):
    ESCOLHAS_PERCENTAGENS = (
                         (10, 10),
                         (20, 20),
                         (30, 30),
                         (40, 40),
                         (50, 50),
                         (60, 60),
                         (70, 70),
                         (80, 80),
                         (90, 90),
                         (100, 100),
                         )
    
    candidato = models.ForeignKey(Candidato)
    
    categoria_contrato = models.ForeignKey(Categoria,
                                           related_name='Contratos_candidato.categoria_contrato_id')
    percentagem_contrato = models.PositiveSmallIntegerField(choices=ESCOLHAS_PERCENTAGENS)
    
    inicio_contrato = models.DateField(verbose_name="Data de Início")
    fim_contrato = models.DateField(verbose_name="Data de Fim")
    
    

    unidade_curricular_1 = models.ForeignKey(UnidadeCurricular, related_name='unidade_curricular_1')
    carga_horaria_1 = models.PositiveSmallIntegerField()
    
    unidade_curricular_2 = models.ForeignKey(UnidadeCurricular, related_name='unidade_curricular_2',
                                             null=True,
                                             blank=True)
    carga_horaria_2 = models.PositiveSmallIntegerField(null=True, blank=True)
    
    unidade_curricular_3 = models.ForeignKey(UnidadeCurricular, related_name='unidade_curricular_3',
                                             null=True, blank=True)
    carga_horaria_3 = models.PositiveSmallIntegerField(null=True, 
                                                       blank=True,
                                                       verbose_name='carga horária')
    
    unidade_curricular_4 = models.ForeignKey(UnidadeCurricular, related_name='unidade_curricular_4',
                                             null=True, blank=True)
    carga_horaria_4 = models.PositiveSmallIntegerField(null=True, blank=True)
    
    unidade_curricular_5 = models.ForeignKey(UnidadeCurricular, related_name='unidade_curricular_5',
                                             null=True, blank=True)
    carga_horaria_5 = models.PositiveSmallIntegerField(null=True, blank=True)
    
    unidade_curricular_6 = models.ForeignKey(UnidadeCurricular, related_name='unidade_curricular_6',
                                             null=True, blank=True)
    carga_horaria_6 = models.PositiveSmallIntegerField(null=True, blank=True)
    
    unidade_curricular_7 = models.ForeignKey(UnidadeCurricular, related_name='unidade_curricular_7',
                                             null=True, blank=True)
    carga_horaria_7 = models.PositiveSmallIntegerField(null=True, blank=True)
    
    unidade_curricular_8 = models.ForeignKey(UnidadeCurricular, related_name='unidade_curricular_8',
                                             null=True, blank=True)
    carga_horaria_8 = models.PositiveSmallIntegerField(null=True, blank=True)
    
    observacoes = models.TextField(max_length=5000,null=True, blank=True,
                                   verbose_name='observações')
    
    def __unicode__(self):
        return u"{0}: de {1} até {2}".format(self.candidato,
                                             self.inicio_contrato, 
                                             self.fim_contrato)
